package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.DeviceCloudIntercomInfoPO;
import com.itlong.cloud.POJO.VO.property.DeviceCloudIntercomInfoProductTypeVO;
import com.itlong.cloud.POJO.VO.property.DeviceCloudIntercomSimpleVO;
import com.itlong.cloud.POJO.VO.property.PropertyAllEquipGetVO;
import com.itlong.cloud.POJO.VO.property.PropertyEquipGetVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      云对讲信息持久层接口
 * </desc>
 *
 * @createDate 2017/9/22
 */
@Mapper
@Repository
public interface IDeviceCloudIntercomInfoDao extends IAbstractBaseDao<DeviceCloudIntercomInfoPO> {

    /**
     * <desc>
     *      添加单个云对讲
     * <desc/>
     * @param   params  bean转换map的参数集
     * @return
     * @author Biao.R
     * @createDate 2017/9/21
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      更新云对讲
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return
     * @author Biao.R
     * @createDate 2017/9/26
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      根据字段查询实体对象
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return
     * @author Biao.R
     * @createDate 2017/9/28
     */
    List<DeviceCloudIntercomInfoPO> getByMap(Map<String, Object> params);

    /**
     * <desc>
     *      根据设备唯一码或云对讲sn查询单个云对讲设备
     * <desc/>
     * @param deviceUnique    设备唯一码
     * @param sn
     * @return      PropertyEquipGetVO    设备返回对象
     * @author Biao.R
     * @createDate 2017/9/27
     */
    DeviceCloudIntercomInfoPO getByDeviceUnique(@Param("deviceUnique") String deviceUnique,
                                                @Param("sn") String sn);

    /**
     * <desc>
     *      根据设备唯一码或云对讲sn查询单个云对讲设备和设备型号名称
     * <desc/>
     * @param deviceUnique    设备唯一码
     * @param sn
     * @return      PropertyEquipGetVO    设备返回对象
     * @author Juguang.S
     * @createDate 2018/07/27
     */
    DeviceCloudIntercomInfoProductTypeVO getProductTypeByDeviceUnique(@Param("deviceUnique") String deviceUnique,
                                                                      @Param("sn") String sn);


    /**
     * <desc>
     *      获取根据条件查询分页数据集
     * <desc/>
     * @param   params  查询参数
     * @return 分页数据集
     * @author Biao.R
     * @createDate 2017/10/9
     */
    List<PropertyEquipGetVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取根据条件查询分页总数量
     * <desc/>
     * @param   params  查询参数
     * @return 分页总数量
     * @author Biao.R
     * @createDate 2017/10/9
     */
    Integer getCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页数据集
     * <desc/>
     * @param   params  查询参数
     * @return 分页数据集
     * @author Juguang.Song
     * @createDate 2018/3/22
     */
    List<PropertyEquipGetVO> getCloudIntercomInfoPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页总数量
     * <desc/>
     * @param   params  查询参数
     * @return 分页总数量
     * @author Juguang.Song
     * @createDate 2018/3/22
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据地址查询云对讲设备
     * <desc/>
     * @param   cloudIntercomAddrDTO    设备类型和查询地址数据参数
     * @return    查询结果集
     * @author Biao.R
     * @createDate 2017/11/1
     */
    List<DeviceCloudIntercomSimpleVO> getCloudIntercomByAddr(Map<String, Object> cloudIntercomAddrDTO);

    /**
     * <desc>
     *      通过项目id获取所有云对讲设备
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/05
     */
    List<DeviceCloudIntercomInfoPO> getCloudIntercomsByProjectId(String projectId);


    /**
     * <desc>
     *      根据projectId查询项目云对讲设备数量
     * <desc/>
     * @param  projectId    查询的小区ID
     * @return 云对讲设备数量
     * @author Biao.R
     * @createDate 2018/1/12
     */
    Integer countCloudEquipByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据projectId查询项目云对讲所有设备
     * </desc>
     *
     * @param params 查询参数
     * @return 分页项目云对讲设备
     * @author wangzhi
     * @createDate 2018/3/26
     */
    List<PropertyAllEquipGetVO> getAllEquipsByProjectId(Map<String,Object> params);

    /**
     * <desc>
     *      根据projectId查询项目云对讲所有设备数量
     * </desc>
     *
     * @param params 查询参数
     * @return 项目所有云对讲设备数量
     * @author wangzhi
     * @createDate 2018/4/02
     */
    Integer getAllEquipsByProjectIdCount(Map<String,Object> params);

    /**
     * <desc>
     *      根据设备唯一码或未开启人脸识别查询单个云对讲设备
     * <desc/>
     * @param deviceUnique    设备唯一码
     * @return      PropertyEquipGetVO    设备返回对象
     * @author Juguang.s
     * @createDate 2018/07/20
     */
    DeviceCloudIntercomInfoPO getByDeviceUniqueAndIsFaceRecognition(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      处理设备旧数据的sip账号，为了便于灵云区分测试和正式sip故在测试环境设备账号前加184前缀
     * <desc/>
     *
     * @return 标准格式化响应结果
     * @author Juguang.S
     * @createDate 2018/12/28
     */
    Integer updateDeviceSipAccount();

    /**
     * <desc>
     *      获取所有设备修改的sip账号
     * <desc/>
     *
     * @return 标准格式化响应结果
     * @author Juguang.S
     * @createDate 2018/12/28
     */
    List<Map<String,String>> getDeviceSipAccount();

    /**
     * <desc>
     *      通过设备序列号获取sn
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/15
     */
    String getSnByDeviceUnique(@Param("deviceUnique") String deviceUnique);
}
